
<!DOCTYPE HTML>
<html lang="zh-hans" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>compose file文档 · docker swarm实践文档</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        <meta name="author" content="Carey">
        
        
    
    <link rel="stylesheet" href="../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-emphasize/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-alerts/style.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-code/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-search-plus/search.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
    
        
    
        
    
        
    
        
    
        
    

        
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="registry仓库管理.html" />
    
    
    <link rel="prev" href="安装docker.html" />
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="输入并搜索" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    
    
        
        <li>
            <a href="http://carey.akhack.com" target="_blank" class="custom-link">Home</a>
        </li>
    
    

    
    <li class="divider"></li>
    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="../">
            
                <a href="../">
            
                    
                    简介
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" >
            
                <span>
            
                    
                    基础环境
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.2.1" data-path="环境介绍.html">
            
                <a href="环境介绍.html">
            
                    
                    环境介绍
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.2" data-path="环境准备.html">
            
                <a href="环境准备.html">
            
                    
                    基础准备
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.3" data-path="安装docker.html">
            
                <a href="安装docker.html">
            
                    
                    安装 docker
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="1.2.4" data-path="compose_file.html">
            
                <a href="compose_file.html">
            
                    
                    compose file文档
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.5" data-path="registry仓库管理.html">
            
                <a href="registry仓库管理.html">
            
                    
                    registry管理
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.3" >
            
                <span>
            
                    
                    swarm 群集
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.3.1" data-path="../swarm_book/创建群集.html">
            
                <a href="../swarm_book/创建群集.html">
            
                    
                    创建群集
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.2" data-path="../swarm_book/portainer.html">
            
                <a href="../swarm_book/portainer.html">
            
                    
                    swarm管理工具Portainer
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.3" data-path="../swarm_book/群集监控.html">
            
                <a href="../swarm_book/群集监控.html">
            
                    
                    cAdvisor InfluxDB Grafana搭建监控平台
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.4" data-path="../swarm_book/telegraf.html">
            
                <a href="../swarm_book/telegraf.html">
            
                    
                    Telegraf监控容器
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.5" data-path="../swarm_book/Chronograf.html">
            
                <a href="../swarm_book/Chronograf.html">
            
                    
                    Chronograf显示监控数据
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.4" >
            
                <span>
            
                    
                    swarm service
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.4.1" data-path="../service_book/nginx.html">
            
                <a href="../service_book/nginx.html">
            
                    
                    部署nginx服务
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.5" >
            
                <span>
            
                    
                    swarm stack
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.5.1" data-path="../swarm_stack/lnmpwordpress.html">
            
                <a href="../swarm_stack/lnmpwordpress.html">
            
                    
                    部署wordpress
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.2" data-path="../swarm_stack/build_eureka.md">
            
                <span>
            
                    
                    部署eureka
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            本书使用 GitBook 发布
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href=".." >compose file文档</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div class="search-plus" id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <h1 id="docker-compose-configuration">docker compose configuration</h1>
<h2 id="&#x4E0D;&#x652F;&#x6301;docker-stack-deploy&#x9009;&#x9879;">&#x4E0D;&#x652F;&#x6301;docker stack deploy&#x9009;&#x9879;</h2>
<ul>
<li>build</li>
<li>cgroup_parent</li>
<li>container_name</li>
<li>devices</li>
<li>tmpfs</li>
<li>external_links</li>
<li>links</li>
<li>network_mode</li>
<li>restart</li>
<li>security_opt</li>
<li>stop_signal</li>
<li>sysctls</li>
<li>userns_mode</li>
</ul>
<h2 id="command">command</h2>
<p>&#x8986;&#x76D6;&#x9ED8;&#x8BA4;&#x547D;&#x4EE4;</p>
<pre><code>command: bundle exec thin -p 3
</code></pre><h2 id="configs">configs</h2>
<p>&#x4F7F;&#x7528;&#x670D;&#x52A1; <code>configs</code> &#x914D;&#x7F6E;&#x4E3A;&#x6BCF;&#x4E2A;&#x670D;&#x52A1;&#x8D4B;&#x4E88;&#x76F8;&#x5E94;&#x7684;&#x8BBF;&#x95EE;&#x6743;&#x9650;&#xFF0C;&#x652F;&#x6301;&#x4E24;&#x79CD;&#x4E0D;&#x540C;&#x7684;&#x8BED;&#x6CD5;</p>
<blockquote>
<p><strong>[warning] Note: &#x914D;&#x7F6E;&#x5FC5;&#x987B;&#x5B58;&#x5728;&#x6216;&#x5728; configs &#x6B64;&#x5806;&#x6808;&#x6587;&#x4EF6;&#x7684;&#x9876;&#x5C42;&#x4E2D;&#x5B9A;&#x4E49;&#xFF0C;&#x5426;&#x5219;&#x5806;&#x6808;&#x90E8;&#x7F72;&#x5931;&#x6548;</strong></p>
</blockquote>
<h3 id="1-short-&#x8BED;&#x6CD5;">1. SHORT &#x8BED;&#x6CD5;</h3>
<p><code>SHORT</code> &#x8BED;&#x6CD5;&#x53EA;&#x80FD;&#x6307;&#x5B9A;&#x914D;&#x7F6E;&#x540D;&#x79F0;&#xFF0C;&#x8FD9;&#x5141;&#x8BB8;&#x5BB9;&#x5668;&#x8BBF;&#x95EE;&#x914D;&#x7F6E;&#x5E76;&#x5C06;&#x5176;&#x5B89;&#x88C5;&#x5728; <code>/&lt;config_name&gt;</code> &#x5BB9;&#x5668;&#x5185;&#xFF0C;<strong>&#x6E90;&#x540D;&#x79F0;&#x548C;&#x76EE;&#x6807;&#x88C5;&#x5165;&#x70B9;&#x90FD;&#x8BBE;&#x4E3A;&#x914D;&#x7F6E;&#x540D;&#x79F0;</strong></p>
<pre><code>version: &quot;3.3&quot;
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true
</code></pre><p>&#x4EE5;&#x4E0A;&#x5B9E;&#x4F8B;&#x4F7F;&#x7528; <code>SHORT</code> &#x8BED;&#x6CD5;&#x5C06; <code>redis</code> &#x670D;&#x52A1;&#x8BBF;&#x95EE;&#x6388;&#x4E88; <code>my_config</code> &#x548C; <code>my_other_config</code> ,&#x5E76;&#x88AB; <code>my_other_config</code> &#x5B9A;&#x4E49;&#x4E3A;&#x5916;&#x90E8;&#x8D44;&#x6E90;&#xFF0C;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x5B83;&#x5DF2;&#x7ECF;&#x5728; <code>Docker</code> &#x4E2D;&#x5B9A;&#x4E49;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; <code>docker config create</code> &#x547D;&#x4EE4;&#x6216;&#x901A;&#x8FC7;&#x53E6;&#x4E00;&#x4E2A;&#x5806;&#x6808;&#x90E8;&#x7F72;&#x3002;&#x5982;&#x679C;&#x5916;&#x90E8;&#x90E8;&#x7F72;&#x914D;&#x7F6E;&#x90FD;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x5219;&#x5806;&#x6808;&#x90E8;&#x7F72;&#x4F1A;&#x5931;&#x8D25;&#x5E76;&#x51FA;&#x73B0; <code>config not found</code> &#x9519;&#x8BEF;</p>
<blockquote>
<p>**[warning] Note: config &#x5B9A;&#x4E49;&#x4EC5;&#x5728; 3.3 &#x7248;&#x672C;&#x6216;&#x5728;&#x66F4;&#x9AD8;&#x7248;&#x672C;&#x7684;&#x64B0;&#x5199;&#x6587;&#x4EF6;&#x683C;&#x5F0F;&#x4E2D;&#x53D7;&#x652F;&#x6301;&#xFF0C;YAML &#x7684;&#x5E03;&#x5C14;&#x503C;&#xFF08;true, false, yes, no, on, off&#xFF09;&#x5FC5;&#x987B;&#x8981;&#x4F7F;&#x7528;&#x5F15;&#x53F7;&#x5F15;&#x8D77;&#x6765;&#xFF08;&#x5355;&#x5F15;&#x53F7;&#x3001;&#x53CC;&#x5F15;&#x53F7;&#x5747;&#x53EF;&#xFF09;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x5F53;&#x6210;&#x5B57;&#x7B26;&#x4E32;&#x89E3;&#x6790;&#x3002;</p>
</blockquote>
<h3 id="2-long-&#x8BED;&#x6CD5;">2. LONG &#x8BED;&#x6CD5;</h3>
<p><code>LONG</code> &#x8BED;&#x6CD5;&#x63D0;&#x4F9B;&#x4E86;&#x521B;&#x5EFA;&#x670D;&#x52A1;&#x914D;&#x7F6E;&#x7684;&#x66F4;&#x52A0;&#x8BE6;&#x7EC6;&#x7684;&#x4FE1;&#x606F;</p>
<ul>
<li><code>source:Docker</code> &#x4E2D;&#x5B58;&#x5728;&#x7684;&#x914D;&#x7F6E;&#x7684;&#x540D;&#x79F0;  </li>
<li><code>target</code>: &#x8981;&#x5728;&#x670D;&#x52A1;&#x7684;&#x4EFB;&#x52A1;&#x4E2D;&#x88C5;&#x8F7D;&#x7684;&#x6587;&#x4EF6;&#x7684;&#x8DEF;&#x5F84;&#x6216;&#x540D;&#x79F0;&#x3002;&#x5982;&#x679C;&#x672A;&#x6307;&#x5B9A;&#x5219;&#x9ED8;&#x8BA4;&#x4E3A; <code>/&lt;source&gt;</code></li>
<li><code>uid</code> &#x548C; <code>gid</code>: &#x5728;&#x670D;&#x52A1;&#x7684;&#x4EFB;&#x52A1;&#x5BB9;&#x5668;&#x4E2D;&#x62E5;&#x6709;&#x5B89;&#x88C5;&#x7684;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x7684;&#x6570;&#x5B57; <code>UID</code> &#x6216; <code>GID</code>&#x3002;&#x5982;&#x679C;&#x672A;&#x6307;&#x5B9A;&#xFF0C;&#x5219;&#x9ED8;&#x8BA4;&#x4E3A;&#x5728;<code>Linux</code>&#x4E0A;&#x3002;<code>Windows</code>&#x4E0D;&#x652F;&#x6301;&#x3002;</li>
<li><code>mode</code>: &#x5728;&#x670D;&#x52A1;&#x7684;&#x4EFB;&#x52A1;&#x5BB9;&#x5668;&#x4E2D;&#x5B89;&#x88C5;&#x7684;&#x6587;&#x4EF6;&#x7684;&#x6743;&#x9650;&#xFF0C;&#x4EE5;&#x516B;&#x8FDB;&#x5236;&#x8868;&#x793A;&#x6CD5;&#x3002;&#x4F8B;&#x5982;&#xFF0C;<code>0444</code> &#x4EE3;&#x8868;&#x6587;&#x4EF6;&#x53EF;&#x8BFB;&#x7684;&#x3002;&#x9ED8;&#x8BA4;&#x662F; <code>0444</code>&#x3002;</li>
</ul>
<p>&#x4E0B;&#x9762;&#x793A;&#x4F8B;&#x5728;&#x5BB9;&#x5668;&#x4E2D;&#x5C06; <code>my_config</code> &#x540D;&#x79F0;&#x8BBE;&#x7F6E;&#x4E3A; <code>redis_config</code>&#xFF0C;&#x5C06;&#x6A21;&#x5F0F;&#x8BBE;&#x7F6E;&#x4E3A; <code>0440</code>&#xFF08;group-readable&#xFF09;&#x5E76;&#x5C06;&#x7528;&#x6237;&#x548C;&#x7EC4;&#x8BBE;&#x7F6E;&#x4E3A; <code>103</code>&#x3002;&#x8BE5;&#x3000;<code>redis</code>&#x3000;&#x670D;&#x52A1;&#x65E0;&#x6CD5;&#x8BBF;&#x95EE; <code>my_other_config</code> &#x914D;&#x7F6E;</p>
<pre><code>version: &quot;3.3&quot;
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - source: my_config
        target: /redis_config
        uid: &apos;103&apos;
        gid: &apos;103&apos;
        mode: 0440
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true
</code></pre><h2 id="deploy">deploy</h2>
<p>&#x6307;&#x5B9A;&#x4E0E;&#x90E8;&#x7F72;&#x548C;&#x8FD0;&#x884C;&#x670D;&#x52A1;&#x76F8;&#x5173;&#x7684;&#x914D;&#x7F6E;  </p>
<h3 id="1endpointmode">1.endpoint_mode</h3>
<p>&#x6307;&#x5B9A;&#x8FDE;&#x63A5;&#x5230;&#x7FA4;&#x7EC4;&#x5916;&#x90E8;&#x5BA2;&#x6237;&#x7AEF;&#x670D;&#x52A1;&#x53D1;&#x73B0;&#x65B9;&#x6CD5;</p>
<ul>
<li><code>endpoint_mode: vip</code> - Docker <strong>&#x4E3A;&#x8BE5;&#x670D;&#x52A1;&#x5206;&#x914D;&#x4E86;&#x4E00;&#x4E2A;&#x865A;&#x62DF; IP(VIP)</strong>,&#x4F5C;&#x4E3A;&#x5BA2;&#x6237;&#x7AEF;&#x7684; &#x201C;&#x524D;&#x7AEF;&#x201C; &#x90E8;&#x4F4D;&#x7528;&#x4E8E;&#x8BBF;&#x95EE;&#x7F51;&#x7EDC;&#x4E0A;&#x7684;&#x670D;&#x52A1;&#x3002;</li>
<li><code>endpoint_mode: dnsrr</code> - <strong>DNS&#x8F6E;&#x8BE2;(DNSRR)&#x670D;&#x52A1;&#x53D1;&#x73B0;</strong>&#x4E0D;&#x4F7F;&#x7528;&#x5355;&#x4E2A;&#x865A;&#x62DF; <code>IP</code>&#x3002;Docker&#x4E3A;&#x670D;&#x52A1;&#x8BBE;&#x7F6E; DNS &#x6761;&#x76EE;&#xFF0C;&#x4F7F;&#x5F97;&#x670D;&#x52A1;&#x540D;&#x79F0;&#x7684; DNS &#x67E5;&#x8BE2;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A; IP &#x5730;&#x5740;&#x5217;&#x8868;&#xFF0C;&#x5E76;&#x4E14;&#x5BA2;&#x6237;&#x7AEF;&#x76F4;&#x63A5;&#x8FDE;&#x63A5;&#x5230;&#x5176;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x3002;&#x5982;&#x679C;&#x60F3;&#x4F7F;&#x7528;&#x81EA;&#x5DF1;&#x7684;&#x8D1F;&#x8F7D;&#x5E73;&#x8861;&#x5668;&#xFF0C;&#x6216;&#x8005;&#x6DF7;&#x5408; Windows &#x548C; Linux &#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF0C;&#x5219; DNS &#x8F6E;&#x8BE2;&#x8C03;&#x5EA6;&#xFF08;round-robin&#xFF09;&#x529F;&#x80FD;&#x5C31;&#x975E;&#x5E38;&#x5B9E;&#x7528;</li>
</ul>
<pre><code>ersion: &quot;3.3&quot;

services:
  wordpress:
    image: wordpress
    ports:
      - &quot;8080:80&quot;
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr

volumes:
  db-data:

networks:
  overlay:
</code></pre><h3 id="2labels">2.labels</h3>
<p>&#x6307;&#x5B9A;&#x670D;&#x52A1;&#x7684;&#x6807;&#x7B7E;&#xFF0C;&#x8FD9;&#x4E9B;&#x6807;&#x7B7E;&#x4EC5;&#x5728;&#x670D;&#x52A1;&#x4E0A;&#x8BBE;&#x7F6E;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x5728;&#x670D;&#x52A1;&#x7684;&#x4EFB;&#x4F55;&#x5BB9;&#x5668;&#x4E0A;&#x8BBE;&#x7F6E;</p>
<pre><code>version: &quot;3&quot;
services:
  web:
    image: web
    deploy:
      labels:
        com.example.description: &quot;This label will appear on the web service&quot;
</code></pre><p>&#x8981;&#x5728;&#x5BB9;&#x5668;&#x4E0A;&#x8BBE;&#x7F6E;&#x6807;&#x7B7E;&#xFF0C;&#x8BF7;&#x4F7F;&#x7528;deploy&#x4E4B;&#x5916;&#x7684;labels&#x8BBE;&#x7F6E;</p>
<pre><code>version: &quot;3&quot;
services:
  web:
    image: web
    labels:
      com.example.description: &quot;This label will appear on all containers for the web service&quot;
</code></pre><h3 id="3mode">3.mode</h3>
<ul>
<li><code>global</code>: &#x6BCF;&#x4E2A;&#x96C6;&#x8282;&#x70B9;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x5BB9;&#x5668;</li>
<li><code>replicated</code>: &#x6307;&#x5B9A;&#x5BB9;&#x5668;&#x6570;&#x91CF;&#xFF08;&#x9ED8;&#x8BA4;&#xFF09;</li>
</ul>
<pre><code>version: &apos;3&apos;
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    deploy:
      mode: global
</code></pre><h3 id="4placement">4.placement</h3>
<p>&#x6307;&#x5B9A; <code>constraints</code> &#x548C; <code>preferences</code></p>
<pre><code>version: &apos;3&apos;
services:
  db:
    image: postgres
    deploy:
      placement:
        constraints:
          - node.role == manager
          - engine.labels.operatingsystem == ubuntu 14.04
        preferences:
          - spread: node.labels.zone
</code></pre><h3 id="5replicas">5.replicas</h3>
<p>&#x6307;&#x5B9A;&#x8FD0;&#x884C;&#x7684;&#x5BB9;&#x5668;&#x6570;&#x91CF;</p>
<pre><code>version: &apos;3&apos;
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6
</code></pre><h3 id="6resources">6.resources</h3>
<p>&#x914D;&#x7F6E;&#x8D44;&#x6E90;&#x9650;&#x5236;</p>
<p>&#x793A;&#x4F8B;&#x4E2D;&#xFF0C;<code>redis</code>&#x670D;&#x52A1;&#x88AB;&#x9650;&#x5236;&#x4E3A;&#x4F7F;&#x7528;&#x4E0D;&#x8D85;&#x8FC7;<code>50M</code>&#x7684;&#x5185;&#x5B58;&#x548C;<code>0.50&#xFF08;50&#xFF05;&#xFF09;</code>&#x7684;&#x53EF;&#x7528;&#x5904;&#x7406;&#x65F6;&#x95F4;<code>&#xFF08;CPU&#xFF09;</code>&#xFF0C;&#x5E76;&#x4E14;&#x4FDD;&#x7559;<code>20M</code>&#x7684;&#x5185;&#x5B58;&#x548C;<code>0.25</code>&#x4E2A;<code>CPU</code>&#x65F6;&#x95F4;</p>
<pre><code>version: &apos;3&apos;
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: &apos;0.50&apos;
          memory: 50M
        reservations:
          cpus: &apos;0.25&apos;
          memory: 20M
</code></pre><h3 id="7restartpolicy">7.restart_policy</h3>
<p>&#x914D;&#x7F6E;&#x5BB9;&#x5668;&#x7684;&#x91CD;&#x65B0;&#x542F;&#x52A8;&#xFF0C;&#x4EE3;&#x66FF; <code>restart</code></p>
<ul>
<li><code>condition</code>: &#x503C;&#x53EF;&#x4EE5;&#x4E3A; <code>none</code> &#x3001;<code>on-failure</code> &#x4EE5;&#x53CA; <code>any</code>(&#x9ED8;&#x8BA4;)</li>
<li><code>delay</code>: &#x5C1D;&#x8BD5;&#x91CD;&#x542F;&#x7684;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#xFF0C;&#x9ED8;&#x8BA4;&#x4E3A; <code>0</code></li>
<li><code>max_attempts</code>: &#x5728;&#x653E;&#x5F03;&#x4E4B;&#x524D;&#x5C1D;&#x8BD5;&#x91CD;&#x65B0;&#x542F;&#x52A8;&#x5BB9;&#x5668;&#x6B21;&#x6570;&#xFF08;&#x9ED8;&#x8BA4;&#xFF1A;&#x4ECE;&#x4E0D;&#x653E;&#x5F03;&#xFF09;&#x3002;</li>
<li><code>windows</code>: &#x5728;&#x51B3;&#x5B9A;&#x91CD;&#x65B0;&#x542F;&#x52A8;&#x662F;&#x5426;&#x6210;&#x529F;&#x4E4B;&#x524D;&#x7684;&#x7B49;&#x65F6;&#x95F4;&#xFF0C;&#x6307;&#x5B9A;&#x4E3A;&#x6301;&#x7EED;&#x65F6;&#x95F4;&#xFF08;&#x9ED8;&#x8BA4;&#x503C;&#xFF1A;&#x7ACB;&#x5373;&#x51B3;&#x5B9A;&#xFF09;&#x3002;</li>
</ul>
<pre><code>version: &quot;3&quot;
services:
  redis:
    image: redis:alpine
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
</code></pre><h3 id="8rollbackconfig">8.rollback_config</h3>
<p>&#x914D;&#x7F6E;&#x5728;&#x66F4;&#x65B0;&#x5931;&#x8D25;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x5E94;&#x5982;&#x4F55;&#x56DE;&#x6EDA;&#x670D;&#x52A1;</p>
<ul>
<li><code>parallelism</code>: &#x4E00;&#x6B21;&#x56DE;&#x6EDA;&#x7684;&#x5BB9;&#x5668;&#x6570;&#x3002;&#x5982;&#x679C;&#x8BBE;&#x7F6E;&#x4E3A;<code>0</code>&#xFF0C;&#x5219;&#x6240;&#x6709;&#x5BB9;&#x5668;&#x540C;&#x65F6;&#x56DE;&#x6EDA;</li>
<li><code>delay</code>: &#x6BCF;&#x4E2A;&#x5BB9;&#x5668;&#x7EC4;&#x7684;&#x56DE;&#x6EDA;&#x4E4B;&#x95F4;&#x7B49;&#x5F85;&#x7684;&#x65F6;&#x95F4;&#xFF08;&#x9ED8;&#x8BA4;&#x4E3A;<code>0</code>&#xFF09;</li>
<li><code>failure_action</code>: &#x5982;&#x679C;&#x56DE;&#x6EDA;&#x5931;&#x8D25;&#x8BE5;&#x600E;&#x4E48;&#x529E;&#x3002;<code>continue</code>&#x7EE7;&#x7EED;&#x6216;<code>pause</code>&#x6682;&#x505C;&#x4E4B;&#x4E00;&#xFF08;&#x9ED8;&#x8BA4;pause&#xFF09; </li>
<li><code>monitor</code>: &#x6BCF;&#x6B21;&#x66F4;&#x65B0;&#x4EFB;&#x52A1;&#x540E;&#x76D1;&#x89C6;&#x5931;&#x8D25;&#x7684;&#x6301;&#x7EED;&#x65F6;&#x95F4;<code>(ns|us|ms|s|m|h)</code> (&#x9ED8;&#x8BA4; <code>0s</code>)</li>
<li><code>max_failure_ratio</code>: &#x56DE;&#x6EDA;&#x671F;&#x95F4;&#x5BB9;&#x5FCD;&#x7684;&#x5931;&#x8D25;&#x7387; (&#x9ED8;&#x8BA4; 0)</li>
<li><code>order</code>: &#x56DE;&#x6EDA;&#x671F;&#x95F4;&#x7684;&#x64CD;&#x4F5C;&#x987A;&#x5E8F;&#x3002; <code>stop-first</code>&#xFF08;&#x65E7;&#x4EFB;&#x52A1;&#x5728;&#x542F;&#x52A8;&#x65B0;&#x4EFB;&#x52A1;&#x4E4B;&#x524D;&#x505C;&#x6B62;&#xFF09;&#x6216;<code>start-first</code>&#xFF08;&#x9996;&#x5148;&#x542F;&#x52A8;&#x65B0;&#x4EFB;&#x52A1;&#xFF0C;&#x5E76;&#x4E14;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x4EFB;&#x52A1;&#x6682;&#x65F6;&#x91CD;&#x53E0;&#xFF09;&#xFF08;&#x9ED8;&#x8BA4;<code>stop-first</code>&#xFF09;</li>
</ul>
<h3 id="9updateconfig">9.update_config</h3>
<ul>
<li><code>parallelism</code>&#xFF1A;&#x4E00;&#x6B21;&#x6027;&#x66F4;&#x65B0;&#x7684;&#x5BB9;&#x5668;&#x6570;&#x91CF;</li>
<li><code>delay</code>&#xFF1A;&#x66F4;&#x65B0;&#x4E00;&#x7EC4;&#x5BB9;&#x5668;&#x4E4B;&#x95F4;&#x7684;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#x3002;</li>
<li><code>failure_action</code>&#xFF1A;&#x5982;&#x679C;&#x66F4;&#x65B0;&#x5931;&#x8D25;&#xFF0C;&#x53EF;&#x4EE5;&#x6267;&#x884C;&#x7684;&#x7684;&#x662F; <code>continue</code>&#x3001;<code>rollback</code> &#x6216; <code>pause</code> &#xFF08;&#x9ED8;&#x8BA4;&#xFF09;</li>
<li><code>monitor</code>&#xFF1A;&#x6BCF;&#x6B21;&#x4EFB;&#x52A1;&#x66F4;&#x65B0;&#x540E;&#x76D1;&#x89C6;&#x5931;&#x8D25;&#x7684;&#x65F6;&#x95F4;<code>(ns|us|ms|s|m|h)</code>&#xFF08;&#x9ED8;&#x8BA4;&#x4E3A;<code>0</code>&#xFF09;</li>
<li><code>max_failure_ratio</code>&#xFF1A;&#x5728;&#x66F4;&#x65B0;&#x671F;&#x95F4;&#x80FD;&#x63A5;&#x53D7;&#x7684;&#x5931;&#x8D25;&#x7387;</li>
<li><code>order</code>&#xFF1A;&#x66F4;&#x65B0;&#x6B21;&#x5E8F;&#x8BBE;&#x7F6E;&#xFF0C;<code>top-first</code>&#xFF08;&#x65E7;&#x7684;&#x4EFB;&#x52A1;&#x5728;&#x5F00;&#x59CB;&#x65B0;&#x4EFB;&#x52A1;&#x4E4B;&#x524D;&#x505C;&#x6B62;&#xFF09;&#x3001;<code>start-first</code>&#xFF08;&#x65B0;&#x7684;&#x4EFB;&#x52A1;&#x9996;&#x5148;&#x542F;&#x52A8;&#xFF0C;&#x5E76;&#x4E14;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x4EFB;&#x52A1;&#x77ED;&#x6682;&#x91CD;&#x53E0;&#xFF09;&#xFF08;&#x9ED8;&#x8BA4; <code>stop-first</code>&#xFF09;</li>
</ul>
<blockquote>
<p><strong>[warning] &#x6CE8;&#x610F;&#xFF1A;<code>order</code>&#x4EC5;&#x5BF9;v3.4&#x53CA;&#x66F4;&#x9AD8;&#x7248;&#x672C;&#x7684;&#x64B0;&#x5199;&#x6587;&#x4EF6;&#x683C;&#x5F0F;&#x652F;&#x6301;</strong></p>
</blockquote>
<pre><code>version: &apos;3.4&apos;
services:
  vote:
    image: dockersamples/examplevotingapp_vote:before
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
        order: stop-first
</code></pre><h2 id="dependson">depends_on</h2>
<p>&#x670D;&#x52A1;&#x4F9D;&#x8D56;&#x5173;&#x7CFB;&#x4E4B;&#x95F4;&#x7684;&#x4F9D;&#x8D56;&#x5173;&#x7CFB;</p>
<p>&#x4F8B;&#x5982;&#x4E0B;&#x9762;&#x5BB9;&#x5668;&#x4F1A;&#x5148;&#x542F;&#x52A8; <code>redis</code> &#x548C; <code>db</code> &#x4E24;&#x4E2A;&#x670D;&#x52A1;&#xFF0C;&#x6700;&#x540E;&#x624D;&#x542F;&#x52A8; <code>web</code> &#x670D;&#x52A1;</p>
<pre><code>version: &apos;3&apos;
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres
</code></pre><h2 id="dns">dns</h2>
<p>&#x81EA;&#x5B9A;&#x4E49;DNS&#x670D;&#x52A1;&#x5668;&#x3002;&#x53EF;&#x4EE5;&#x662F;&#x5355;&#x4E2A;&#x503C;&#x6216;&#x5217;&#x8868;</p>
<pre><code>dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9
</code></pre><h2 id="dnssearch">dns_search</h2>
<p>&#x81EA;&#x5B9A;&#x4E49; DNS &#x641C;&#x7D22;&#x57DF;&#xFF0C;&#x53EF;&#x4EE5;&#x662F;&#x5355;&#x4E2A;&#x503C;&#x6216;&#x5217;&#x8868;</p>
<pre><code>dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com
</code></pre><h2 id="tmpfs">tmpfs</h2>
<p>&#x5728;&#x5BB9;&#x5668;&#x5185;&#x5B89;&#x88C5;&#x4E34;&#x65F6;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x3002;&#x53EF;&#x4EE5;&#x662F;&#x5355;&#x4E2A;&#x503C;&#x6216;&#x5217;&#x8868;</p>
<blockquote>
<p><strong>[info] Version 3.6&#x53CA;&#x4EE5;&#x4E0A;&#x542F;&#x7528;</strong></p>
</blockquote>
<pre><code>tmpfs: /run
tmpfs:
  - /run
  - /tmp
</code></pre><p>&#x5728;&#x5BB9;&#x5668;&#x5185;&#x5B89;&#x88C5;&#x4E34;&#x65F6;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x3002; Size&#x53C2;&#x6570;&#x6307;&#x5B9A;tmpfs mount&#x7684;&#x5927;&#x5C0F;&#xFF08;&#x4EE5;&#x5B57;&#x8282;&#x4E3A;&#x5355;&#x4F4D;&#xFF09;&#x3002;&#x9ED8;&#x8BA4;&#x65E0;&#x9650;&#x5236;</p>
<pre><code> - type: tmpfs
     target: /app
     tmpfs:
       size: 1000
</code></pre><h2 id="entrypoint">entrypoint</h2>
<p>&#x5728; <code>Dockerfile</code> &#x4E2D;&#x6709;&#x4E00;&#x4E2A;&#x6307;&#x4EE4;&#x53EB;&#x505A; <code>ENTRYPOINT</code> &#x6307;&#x4EE4;&#xFF0C;&#x7528;&#x4E8E;&#x6307;&#x5B9A;&#x63A5;&#x5165;&#x70B9;&#x3002;&#x8986;&#x76D6; <code>Dockerfile</code> &#x4E2D;&#x7684;&#x5B9A;&#x4E49;</p>
<pre><code>entrypoint:
    - php
    - -d
    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
    - -d
    - memory_limit=-1
    - vendor/bin/phpunit
</code></pre><h2 id="envfile">env_file</h2>
<p>&#x4ECE;&#x6587;&#x4EF6;&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002;&#x53EF;&#x4EE5;&#x662F;&#x5355;&#x4E2A;&#x503C;&#x6216;&#x5217;&#x8868;&#x3002;<br>&#x4F46; <code>environment</code> &#x73AF;&#x5883;&#x4E2D;&#x7684;&#x8BBE;&#x7F6E;&#x7684;&#x53D8;&#x91CF;&#x4F1A;&#x4F1A;&#x8986;&#x76D6;&#x8FD9;&#x4E9B;&#x503C;&#xFF0C;&#x65E0;&#x8BBA;&#x8FD9;&#x4E9B;&#x503C;&#x672A;&#x5B9A;&#x4E49;&#x8FD8;&#x662F;&#x4E3A; <code>None</code></p>
<pre><code>env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env
</code></pre><h2 id="environment">environment</h2>
<p>&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x6570;&#x7EC4;&#x6216;&#x5B57;&#x5178;&#x3002;&#x4E0E;&#x4E0A;&#x9762;&#x7684; <code>env_file</code> &#x9009;&#x9879;&#x5B8C;&#x5168;&#x4E0D;&#x540C;&#xFF0C;&#x53CD;&#x800C;&#x548C; <code>arg</code> &#x6709;&#x51E0;&#x5206;&#x7C7B;&#x4F3C;&#xFF0C;&#x8FD9;&#x4E2A;&#x6807;&#x7B7E;&#x7684;&#x4F5C;&#x7528;&#x662F;&#x8BBE;&#x7F6E;&#x955C;&#x50CF;&#x53D8;&#x91CF;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x4FDD;&#x5B58;&#x53D8;&#x91CF;&#x5230;&#x955C;&#x50CF;&#x91CC;&#x9762;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x542F;&#x52A8;&#x7684;&#x5BB9;&#x5668;&#x4E5F;&#x4F1A;&#x5305;&#x542B;&#x8FD9;&#x4E9B;&#x53D8;&#x91CF;&#x8BBE;&#x7F6E;&#xFF0C;&#x8FD9;&#x662F;&#x4E0E; <code>arg</code> &#x6700;&#x5927;&#x7684;&#x4E0D;&#x540C;&#x3002;<br>&#x4E00;&#x822C; <code>arg</code> &#x6807;&#x7B7E;&#x7684;&#x53D8;&#x91CF;&#x4EC5;&#x7528;&#x5728;&#x6784;&#x5EFA;&#x8FC7;&#x7A0B;&#x4E2D;&#x3002;&#x800C; <code>environment</code> &#x548C; <code>Dockerfile</code> &#x4E2D;&#x7684; <code>ENV</code> &#x6307;&#x4EE4;&#x4E00;&#x6837;&#x4F1A;&#x628A;&#x53D8;&#x91CF;&#x4E00;&#x76F4;&#x4FDD;&#x5B58;&#x5728;&#x955C;&#x50CF;&#x3001;&#x5BB9;&#x5668;&#x4E2D;&#xFF0C;&#x7C7B;&#x4F3C; <code>docker run -e</code> &#x7684;&#x6548;&#x679C;</p>
<pre><code>environment:
  RACK_ENV: development
  SHOW: &apos;true&apos;
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET
</code></pre><h2 id="expose">expose</h2>
<p>&#x66B4;&#x9732;&#x7AEF;&#x53E3;&#x800C;&#x4E0D;&#x5C06;&#x5B83;&#x4EEC;&#x53D1;&#x5E03;&#x5230;&#x4E3B;&#x673A;, &#x5B83;&#x4EEC;&#x53EA;&#x80FD;&#x88AB;&#x94FE;&#x63A5;&#x670D;&#x52A1;&#x8BBF;&#x95EE;&#x3002;&#x53EA;&#x80FD;&#x6307;&#x5B9A;&#x5185;&#x90E8;&#x7AEF;&#x53E3;,&#x5982;&#x679C;&#x9700;&#x8981;&#x53D1;&#x5E03;&#x5230;&#x4E3B;&#x673A;&#x9700;&#x8981;&#x4F7F;&#x7528;<code>ports</code></p>
<pre><code>expose:
 - &quot;3000&quot;
 - &quot;8000&quot;
</code></pre><h2 id="extrahosts">extra_hosts</h2>
<p>&#x6DFB;&#x52A0;&#x4E3B;&#x673A;&#x540D;&#x6620;&#x5C04;&#x3002;&#x4F7F;&#x7528;&#x4E0E;<code>docker --add-host</code>&#x53C2;&#x6570;&#x76F8;&#x540C;&#x7684;&#x503C;</p>
<pre><code>extra_hosts:
 - &quot;somehost:162.242.195.82&quot;
 - &quot;otherhost:50.31.209.229&quot;
</code></pre><p>&#x5BB9;&#x5668;&#x542F;&#x52A8;&#x540E;&#x5728;<code>/etc/hosts</code>&#x67E5;&#x770B;<code>hosts</code></p>
<pre><code>162.242.195.82  somehost
50.31.209.229   otherhost
</code></pre><h2 id="healthcheck">healthcheck</h2>
<blockquote>
<p><strong>[info] Version 2.1 &#x53CA;&#x4EE5;&#x4E0A;&#x542F;&#x7528;</strong></p>
</blockquote>
<p>&#x914D;&#x7F6E;&#x8FD0;&#x884C;&#x7684;&#x68C0;&#x67E5;&#x4EE5;&#x786E;&#x5B9A;&#x6B64;&#x670D;&#x52A1;&#x7684;&#x5BB9;&#x5668;&#x662F;&#x5426;&#x5065;&#x5EB7;, &#x53C2;&#x8003;<a href="https://docs.docker.com/engine/reference/builder/#healthcheck" target="_blank">healthcheck</a>&#x6587;&#x6863;</p>
<pre><code>healthcheck:
  test: [&quot;CMD&quot;, &quot;curl&quot;, &quot;-f&quot;, &quot;http://localhost&quot;]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s
</code></pre><blockquote>
<p><strong>[info] &#x6CE8;&#x610F;&#xFF1A;<code>start_period</code>&#x4EC5;&#x652F;&#x6301;v3.4&#x53CA;&#x66F4;&#x9AD8;&#x7248;&#x672C;</strong></p>
</blockquote>
<ul>
<li><code>interval</code>&#xFF0C;<code>timeout</code> &#x4EE5;&#x53CA; <code>start_period</code> &#x90FD;&#x5B9A;&#x4E3A;&#x6301;&#x7EED;&#x65F6;&#x95F4;</li>
<li><code>test</code> &#x5FC5;&#x987B;&#x662F;&#x5B57;&#x7B26;&#x4E32;&#x6216;&#x5217;&#x8868;&#xFF0C;&#x5982;&#x679C;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x5217;&#x8868;&#xFF0C;&#x7B2C;&#x4E00;&#x9879;&#x5FC5;&#x987B;&#x662F; <code>NONE</code>&#xFF0C;<code>CMD</code> &#x6216; <code>CMD-SHELL</code> &#xFF1B;&#x5982;&#x679C;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x5219;&#x76F8;&#x5F53;&#x4E8E;&#x6307;&#x5B9A;<code>CMD-SHELL</code> &#x540E;&#x8DDF;&#x8BE5;&#x5B57;&#x7B26;&#x4E32;</li>
</ul>
<pre><code># Hit the local web app
test: [&quot;CMD&quot;, &quot;curl&quot;, &quot;-f&quot;, &quot;http://localhost&quot;]

# As above, but wrapped in /bin/sh. Both forms below are equivalent.
test: [&quot;CMD-SHELL&quot;, &quot;curl -f http://localhost || exit 1&quot;]
test: curl -f https://localhost || exit 1
</code></pre><p>&#x7981;&#x7528;&#x56FE;&#x50CF;&#x8BBE;&#x7F6E;&#x7684;&#x4EFB;&#x4F55;&#x9ED8;&#x8BA4;&#x8FD0;&#x884C;&#x72B6;&#x51B5;&#x68C0;&#x67E5;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;<code>disable&#xFF1A;true</code>&#x3002;&#x8FD9;&#x76F8;&#x5F53;&#x4E8E;&#x6307;&#x5B9A;<code>test&#xFF1A;[&#x201C;NONE&#x201D;]</code></p>
<pre><code>healthcheck:
  disable: true
</code></pre><h2 id="image">image</h2>
<p>&#x6307;&#x5B9A;&#x56FE;&#x50CF;&#x4EE5;&#x4ECE;&#x4E2D;&#x542F;&#x52A8;&#x5BB9;&#x5668;&#x3002;&#x53EF;&#x4EE5;&#x662F;<code>image/tag</code>&#x6216;<code>image ID</code></p>
<pre><code>image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
</code></pre><h2 id="labels">labels</h2>
<p>&#x4F7F;&#x7528; <code>Docker</code> &#x6807;&#x7B7E;&#x5C06;&#x5143;&#x6570;&#x636E;&#x6DFB;&#x52A0;&#x5230;&#x5BB9;&#x5668;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x6570;&#x7EC4;&#x6216;&#x5B57;&#x5178;</p>
<pre><code>labels:
  com.example.description: &quot;Accounting webapp&quot;
  com.example.department: &quot;Finance&quot;
  com.example.label-with-empty-value: &quot;&quot;

labels:
  - &quot;com.example.description=Accounting webapp&quot;
  - &quot;com.example.department=Finance&quot;
  - &quot;com.example.label-with-empty-value&quot;
</code></pre><h2 id="logging">logging</h2>
<p>&#x914D;&#x7F6E;&#x65E5;&#x5FD7;&#x670D;&#x52A1;</p>
<pre><code>logging:
  driver: syslog
  options:
    syslog-address: &quot;tcp://192.168.0.42:123&quot;
</code></pre><p>&#x8BE5; <code>driver</code>&#x503C;&#x662F;&#x6307;&#x5B9A;&#x670D;&#x52A1;&#x5668;&#x7684;&#x65E5;&#x5FD7;&#x8BB0;&#x5F55;&#x9A71;&#x52A8;&#x7A0B;&#x5E8F;&#xFF0C;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A; <code>json-file</code>,&#x4E0E; <code>--log-diver</code> &#x9009;&#x9879;&#x4E00;&#x6837;</p>
<pre><code>driver: &quot;json-file&quot;
driver: &quot;syslog&quot;
driver: &quot;none&quot;
</code></pre><blockquote>
<p><strong>[info] &#x6CE8;&#x610F;&#xFF1A;&#x53EA;&#x6709;&#x9A71;&#x52A8;&#x7A0B;&#x5E8F; <code>json-file</code> &#x548C; <code>journald</code> &#x9A71;&#x52A8;&#x7A0B;&#x5E8F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4ECE; <code>docker-compose up</code> &#x548C; <code>docker-compose logs</code> &#x83B7;&#x53D6;&#x65E5;&#x5FD7;&#x3002;&#x4F7F;&#x7528;&#x4EFB;&#x4F55;&#x5176;&#x4ED6;&#x65B9;&#x5F0F;&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x4EFB;&#x4F55;&#x65E5;&#x5FD7;&#x3002;</strong></p>
</blockquote>
<pre><code>services:
  some-service:
    image: some-service
    logging:
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;200k&quot;
        max-file: &quot;10&quot;
</code></pre><h2 id="networks">networks</h2>
<p>&#x52A0;&#x5165;&#x6307;&#x5B9A;&#x7F51;&#x7EDC;</p>
<pre><code>services:
  some-service:
    networks:
     - some-network
     - other-network
</code></pre><h2 id="aliases">aliases</h2>
<p>&#x540C;&#x4E00;&#x7F51;&#x7EDC;&#x4E0A;&#x7684;&#x5176;&#x4ED6;&#x5BB9;&#x5668;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x670D;&#x52A1;&#x5668;&#x540D;&#x79F0;&#x6216;&#x522B;&#x540D;&#x6765;&#x8FDE;&#x63A5;&#x5230;&#x5176;&#x4ED6;&#x670D;&#x52A1;&#x7684;&#x5BB9;&#x5668;</p>
<pre><code>services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
         - alias3
      other-network:
        aliases:
         - alias2
</code></pre><h2 id="ports">ports</h2>
<p>&#x6620;&#x5C04;&#x7AEF;&#x53E3;</p>
<blockquote>
<p><strong>[warning] &#x6CE8;&#x610F;: &#x7AEF;&#x53E3;&#x6620;&#x5C04;&#x4E0E;<code>network_mode&#xFF1A;host</code>&#x4E0D;&#x517C;&#x5BB9;</strong></p>
</blockquote>
<h3 id="1short-&#x8BED;&#x6CD5;">1.SHORT &#x8BED;&#x6CD5;</h3>
<p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <code>HOST:CONTAINER</code> &#x7684;&#x65B9;&#x5F0F;&#x6307;&#x5B9A;&#x7AEF;&#x53E3;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x5BB9;&#x5668;&#x7AEF;&#x53E3;&#xFF08;&#x9009;&#x62E9;&#x4E34;&#x65F6;&#x4E3B;&#x673A;&#x7AEF;&#x53E3;&#xFF09;&#xFF0C;&#x5BBF;&#x4E3B;&#x673A;&#x4F1A;&#x968F;&#x673A;&#x6620;&#x5C04;&#x7AEF;&#x53E3;</p>
<pre><code>ports:
 - &quot;3000&quot;
 - &quot;3000-3005&quot;
 - &quot;8000:8000&quot;
 - &quot;9090-9091:8080-8081&quot;
 - &quot;49100:22&quot;
 - &quot;127.0.0.1:8001:8001&quot;
 - &quot;127.0.0.1:5000-5010:5000-5010&quot;
 - &quot;6060:6060/udp&quot;
</code></pre><blockquote>
<p><strong>[warning] &#x6CE8;&#x610F;&#xFF1A;&#x5F53;&#x4F7F;&#x7528; <code>HOST:CONTAINER</code> &#x683C;&#x5F0F;&#x6765;&#x6620;&#x5C04;&#x7AEF;&#x53E3;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x7684;&#x5BB9;&#x5668;&#x7AEF;&#x53E3;&#x5C0F;&#x4E8E; <code>60</code> &#x53EF;&#x80FD;&#x4F1A;&#x5F97;&#x5230;&#x9519;&#x8BEF;&#x5F97;&#x7ED3;&#x679C;&#xFF0C;&#x56E0;&#x4E3A;<code>YAML</code> &#x5C06;&#x4F1A;&#x89E3;&#x6790; <code>xx:yy</code> &#x8FD9;&#x79CD;&#x6570;&#x5B57;&#x683C;&#x5F0F;&#x4E3A; <code>60</code> &#x8FDB;&#x5236;&#xFF0C;&#x6240;&#x4EE5;&#x5EFA;&#x8BAE;&#x91C7;&#x7528;&#x5B57;&#x7B26;&#x4E32;&#x683C;&#x5F0F;&#x3002;</strong></p>
</blockquote>
<h3 id="2long-&#x8BED;&#x6CD5;">2.LONG &#x8BED;&#x6CD5;</h3>
<p><code>LONG</code> &#x8BED;&#x6CD5;&#x652F;&#x6301;<code>SHORT</code> &#x8BED;&#x6CD5;&#x4E0D;&#x652F;&#x6301;&#x7684;&#x9644;&#x52A0;&#x5B57;&#x6BB5;</p>
<ul>
<li><code>target</code>&#xFF1A;&#x5BB9;&#x5668;&#x5185;&#x7684;&#x7AEF;&#x53E3;</li>
<li><code>published</code>&#xFF1A;&#x516C;&#x5F00;&#x7684;&#x7AEF;&#x53E3;</li>
<li><code>protocol</code>&#xFF1A; &#x7AEF;&#x53E3;&#x534F;&#x8BAE;&#xFF08;<code>tcp</code> &#x6216; <code>udp</code>&#xFF09;</li>
<li><code>mode</code>&#xFF1A;&#x901A;&#x8FC7;<code>host</code> &#x7528;&#x5728;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x8FD8;&#x662F;&#x54EA;&#x4E2A;&#x53D1;&#x5E03;&#x7684;&#x4E3B;&#x673A;&#x7AEF;&#x53E3;&#x6216;&#x4F7F;&#x7528; <code>ingress</code> &#x7528;&#x4E8E;&#x96C6;&#x7FA4;&#x6A21;&#x5F0F;&#x7AEF;&#x53E3;&#x8FDB;&#x884C;&#x5E73;&#x8861;&#x8D1F;&#x8F7D;</li>
</ul>
<pre><code>ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: host
</code></pre><blockquote>
<p><strong>[info] &#x6CE8;&#x610F;&#xFF1A;LONG&#x8BED;&#x6CD5;&#x662F;v3.2&#x4E2D;&#x7684;&#x65B0;&#x589E;&#x529F;&#x80FD;</strong></p>
</blockquote>
<h2 id="stopgraceperiod">stop_grace_period</h2>
<p>&#x5728;&#x53D1;&#x9001; <code>SIGKILL</code> &#x4E4B;&#x524D;&#x6307;&#x5B9A; <code>stop_signal</code> &#xFF0C;&#x5982;&#x679C;&#x8BD5;&#x56FE;&#x505C;&#x6B62;&#x5BB9;&#x5668;&#xFF08;&#x5982;&#x679C;&#x5B83;&#x6CA1;&#x6709;&#x5904;&#x7406; <code>SIGTERM</code>&#xFF08;&#x6216;&#x6307;&#x5B9A;&#x7684;&#x4EFB;&#x4F55;&#x505C;&#x6B62;&#x4FE1;&#x53F7;&#xFF09;&#xFF09;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x7B49;&#x5F85;&#x7684;&#x65F6;&#x95F4;</p>
<pre><code>stop_grace_period: 1s
stop_grace_period: 1m30s
</code></pre><p>&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;<code>stop</code> &#x5728;&#x53D1;&#x9001;<code>SIGKILL</code>&#x4E4B;&#x524D;&#x7B49;&#x5F85;<code>10</code>&#x79D2;&#x949F;&#x5BB9;&#x5668;&#x9000;&#x51FA;</p>
<h2 id="sysctls">sysctls</h2>
<p>&#x5728;&#x5BB9;&#x5668;&#x4E2D;&#x8BBE;&#x7F6E;&#x7684;&#x5185;&#x6838;&#x53C2;&#x6570;&#xFF0C;&#x53EF;&#x4EE5;&#x4E3A;&#x6570;&#x7EC4;&#x6216;&#x5B57;&#x5178;</p>
<pre><code>sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0

sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0
</code></pre><h2 id="ulimits">ulimits</h2>
<p>&#x8986;&#x76D6;&#x5BB9;&#x5668;&#x7684;&#x9ED8;&#x8BA4;&#x9650;&#x5236;&#xFF0C;&#x53EF;&#x4EE5;&#x5355;&#x4E00;&#x5730;&#x5C06;&#x9650;&#x5236;&#x503C;&#x8BBE;&#x4E3A;&#x4E00;&#x4E2A;&#x6574;&#x6570;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x5C06;<code>soft/hard</code> &#x9650;&#x5236;&#x6307;&#x5B9A;&#x4E3A;&#x6620;&#x5C04;</p>
<pre><code>ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000
</code></pre><h2 id="volumes">volumes</h2>
<p>&#x6302;&#x8F7D;&#x4E00;&#x4E2A;&#x76EE;&#x5F55;&#x6216;&#x8005;&#x4E00;&#x4E2A;&#x5DF2;&#x5B58;&#x5728;&#x7684;&#x6570;&#x636E;&#x5377;&#x5BB9;&#x5668;&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4F7F;&#x7528; <code>HOST:CONTAINER</code> &#x8FD9;&#x6837;&#x7684;&#x683C;&#x5F0F;&#xFF0C;&#x6216;&#x8005;&#x4F7F;&#x7528; <code>HOST:CONTAINER:ro</code> &#x8FD9;&#x6837;&#x7684;&#x683C;&#x5F0F;&#xFF0C;&#x540E;&#x8005;&#x5BF9;&#x4E8E;&#x5BB9;&#x5668;&#x6765;&#x8BF4;&#xFF0C;&#x6570;&#x636E;&#x5377;&#x662F;&#x53EA;&#x8BFB;&#x7684;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x6709;&#x6548;&#x4FDD;&#x62A4;&#x5BBF;&#x4E3B;&#x673A;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</p>
<pre><code>version: &quot;3.2&quot;
services:
  web:
    image: nginx:alpine
    volumes:
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: ./static
        target: /opt/app/static

  db:
    image: postgres:latest
    volumes:
      - &quot;/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock&quot;
      - &quot;dbdata:/var/lib/postgresql/data&quot;

volumes:
  mydata:
  dbdata:
</code></pre><h3 id="1short-&#x8BED;&#x6CD5;">1.SHORT &#x8BED;&#x6CD5;</h3>
<p>&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x5728;&#x4E3B;&#x673A;<code>&#xFF08;HOST:CONTAINER&#xFF09;</code>&#x6216;&#x8BBF;&#x95EE;&#x6A21;&#x5F0F;<code>&#xFF08;HOST:CONTAINER:ro&#xFF09;</code>&#x4E0A;&#x6307;&#x5B9A;&#x8DEF;&#x5F84;&#x3002;</p>
<p>&#x53EF;&#x4EE5;&#x5728;&#x4E3B;&#x673A;&#x4E0A;&#x6302;&#x8F7D;&#x76F8;&#x5BF9;&#x8DEF;&#x5F84;&#xFF0C;&#x8BE5;&#x8DEF;&#x5F84;&#x76F8;&#x5BF9;&#x4E8E;&#x6B63;&#x5728;&#x4F7F;&#x7528;&#x7684; <code>Compose</code> &#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x7684;&#x76EE;&#x5F55;&#x8FDB;&#x884C;&#x6269;&#x5C55;&#x3002;&#x76F8;&#x5BF9;&#x8DEF;&#x5F84;&#x5E94;&#x59CB;&#x7EC8;&#x4EE5; <code>.</code> &#x6216; <code>..</code> &#x5F00;&#x5934;</p>
<pre><code>volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql

  # Specify an absolute path mapping
  - /opt/data:/var/lib/mysql

  # Path on the host, relative to the Compose file
  - ./cache:/tmp/cache

  # User-relative path
  - ~/configs:/etc/configs/:ro

  # Named volume
  - datavolume:/var/lib/mysql
</code></pre><h3 id="2long-&#x8BED;&#x6CD5;">2.LONG &#x8BED;&#x6CD5;</h3>
<p>LONG &#x8BED;&#x6CD5;&#x6709;&#x4E9B;&#x9644;&#x52A0;&#x5B57;&#x6BB5;</p>
<ul>
<li><code>type</code>&#xFF1A;&#x5B89;&#x88C5;&#x7C7B;&#x578B;&#xFF0C;&#x53EF;&#x4EE5;&#x4E3A; <code>volume</code>&#x3001;<code>bind</code> &#x6216; <code>tmpfs</code></li>
<li><code>source</code>&#xFF1A;&#x5B89;&#x88C5;&#x6E90;&#xFF0C;&#x4E3B;&#x673A;&#x4E0A;&#x7528;&#x4E8E;&#x7ED1;&#x5B9A;&#x5B89;&#x88C5;&#x7684;&#x8DEF;&#x5F84;&#x6216;&#x5B9A;&#x4E49;&#x5728;&#x9876;&#x7EA7; <code>volumes</code>&#x5BC6;&#x94A5;&#x4E2D;&#x5377;&#x7684;&#x540D;&#x79F0; ,&#x4E0D;&#x9002;&#x7528;&#x4E8E; - <code>tmpfs</code> &#x7C7B;&#x578B;&#x5B89;&#x88C5;&#x3002;</li>
<li><code>target</code>&#xFF1A;&#x5377;&#x5B89;&#x88C5;&#x5728;&#x5BB9;&#x5668;&#x4E2D;&#x7684;&#x8DEF;&#x5F84;</li>
<li><code>read_only</code>&#xFF1A;&#x6807;&#x5FD7;&#x5C06;&#x5377;&#x8BBE;&#x7F6E;&#x4E3A;&#x53EA;&#x8BFB;</li>
<li><code>bind</code>&#xFF1A;&#x914D;&#x7F6E;&#x989D;&#x5916;&#x7684;&#x7ED1;&#x5B9A;&#x9009;&#x9879;</li>
<li><code>propagation</code>&#xFF1A;&#x7528;&#x4E8E;&#x7ED1;&#x5B9A;&#x7684;&#x4F20;&#x64AD;&#x6A21;&#x5F0F;</li>
<li><code>volume</code>&#xFF1A;&#x914D;&#x7F6E;&#x989D;&#x5916;&#x7684;&#x97F3;&#x91CF;&#x9009;&#x9879;</li>
<li><code>nocopy</code>&#xFF1A;&#x521B;&#x5EFA;&#x5377;&#x65F6;&#x7981;&#x6B62;&#x4ECE;&#x5BB9;&#x5668;&#x590D;&#x5236;&#x6570;&#x636E;&#x7684;&#x6807;&#x5FD7;</li>
<li><code>tmpfs</code>&#xFF1A;&#x914D;&#x7F6E;&#x989D;&#x5916;&#x7684; <code>tmpfs</code> &#x9009;&#x9879;</li>
<li><code>size</code>&#xFF1A;<code>tmpfs</code> &#x7684;&#x5927;&#x5C0F;&#xFF0C;&#x4EE5;&#x5B57;&#x8282;&#x4E3A;&#x5355;&#x4F4D;</li>
</ul>
<blockquote>
<p><strong>[info] &#x6CE8;&#x610F;&#xFF1A;LONG&#x8BED;&#x6CD5;&#x662F;v3.2&#x4E2D;&#x7684;&#x65B0;&#x589E;&#x529F;&#x80FD;</strong></p>
</blockquote>
<pre><code>version: &quot;3.2&quot;
services:
  web:
    image: nginx:alpine
    ports:
      - &quot;80:80&quot;
    volumes:
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: ./static
        target: /opt/app/static

networks:
  webnet:

volumes:
  mydata:
</code></pre><h2 id="volumesfrom">volumes_from</h2>
<p>&#x4ECE;&#x5176;&#x5B83;&#x5BB9;&#x5668;&#x6216;&#x8005;&#x670D;&#x52A1;&#x6302;&#x8F7D;&#x6570;&#x636E;&#x5377;&#xFF0C;&#x53EF;&#x9009;&#x7684;&#x53C2;&#x6570;&#x662F; <code>:ro</code> &#x6216; <code>:rw</code>&#xFF0C;&#x524D;&#x8005;&#x8868;&#x793A;&#x5BB9;&#x5668;&#x53EA;&#x8BFB;&#xFF0C;&#x540E;&#x8005;&#x8868;&#x793A;&#x5BB9;&#x5668;&#x5BF9;&#x6570;&#x636E;&#x5377;&#x662F;&#x53EF;&#x8BFB;&#x53EF;&#x5199;&#x7684;&#xFF08;&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E3A;&#x53EF;&#x8BFB;&#x53EF;&#x5199;&#x7684;&#xFF09;&#x3002;</p>
<pre><code>volumes_from:
  - service_name
  - service_name:ro
  - container:container_name
  - container:container_name:rw
</code></pre><h2 id="restart">restart</h2>
<p>&#x9ED8;&#x8BA4;&#x503C;&#x4E3A; <code>no</code> &#xFF0C;&#x5373;&#x5728;&#x4EFB;&#x4F55;&#x60C5;&#x51B5;&#x4E0B;&#x90FD;&#x4E0D;&#x4F1A;&#x91CD;&#x65B0;&#x542F;&#x52A8;&#x5BB9;&#x5668;&#xFF1B;&#x5F53;&#x503C;&#x4E3A; <code>always</code> &#x65F6;&#xFF0C;&#x5BB9;&#x5668;&#x603B;&#x662F;&#x91CD;&#x65B0;&#x542F;&#x52A8;&#xFF1B;&#x5F53;&#x503C;&#x4E3A; <code>on-failure</code> &#x65F6;&#xFF0C;&#x5F53;&#x51FA;&#x73B0; <code>on-failure</code> &#x62A5;&#x9519;&#x5BB9;&#x5668;&#x9000;&#x51FA;&#x65F6;&#xFF0C;&#x5BB9;&#x5668;&#x91CD;&#x65B0;&#x542F;&#x52A8;&#x3002;</p>
<pre><code>restart: &quot;no&quot;
restart: always
restart: on-failure
restart: unless-stopped
</code></pre><blockquote>
<p><strong>[danger] &#x6CE8;&#x610F;&#xFF1A;&#x4F7F;&#x7528;<code>v3 Compose</code>&#x6587;&#x4EF6;&#x5728;<code>deploying a stack in swarm mode</code> &#xFF0C;&#x5C06;&#x5FFD;&#x7565;&#x6B64;&#x9009;&#x9879;&#x3002;&#x8BF7;&#x6539;&#x7528;<code>restart_policy</code></strong></p>
</blockquote>

                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="安装docker.html" class="navigation navigation-prev " aria-label="Previous page: 安装 docker">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="registry仓库管理.html" class="navigation navigation-next " aria-label="Next page: registry管理">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"compose file文档","level":"1.2.4","depth":2,"next":{"title":"registry管理","level":"1.2.5","depth":2,"path":"base_book/registry仓库管理.md","ref":"base_book/registry仓库管理.md","articles":[]},"previous":{"title":"安装 docker","level":"1.2.3","depth":2,"path":"base_book/安装docker.md","ref":"base_book/安装docker.md","articles":[]},"dir":"ltr"},"config":{"plugins":["emphasize","alerts","code","-lunr","-search","search-plus","splitter"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"emphasize":{},"splitter":{},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"alerts":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"search-plus":{}},"theme":"default","author":"Carey","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"docker swarm实践文档","language":"zh-hans","links":{"sidebar":{"Home":"http://carey.akhack.com"}},"gitbook":"*"},"file":{"path":"base_book/compose_file.md","mtime":"2018-11-30T03:38:37.570Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-12-04T03:25:36.834Z"},"basePath":"..","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="../gitbook/gitbook.js"></script>
    <script src="../gitbook/theme.js"></script>
    
        
        <script src="../gitbook/gitbook-plugin-alerts/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-code/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-search-plus/search.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

    </body>
</html>

